package br.com.controllcivil.managegbean;

import java.io.Serializable;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.enterprise.context.Conversation;
import javax.enterprise.context.ConversationScoped;
import javax.faces.bean.ManagedBean;
import javax.inject.Inject;
import javax.inject.Named;
import javax.persistence.PreRemove;

import net.sf.jasperreports.engine.JasperPrint;
import br.com.controllcivil.generic.managegbean.ManagedBeanCRUD;
import br.com.controllcivil.relatorio.RelatorioUtil;
import controllcivil.bean.Estoque;
import controllcivil.bean.Material;
import controllcivil.interfaces.IEstoque;

@Named
@ConversationScoped
@ManagedBean(name = "estoqueMB")
public class EstoqueMB extends ManagedBeanCRUD<Estoque> implements Serializable {
	
	private static final long serialVersionUID = 6534738014063559587L;

	@Inject
	private Conversation conversation;
	
	@EJB
	private IEstoque estoqueEJB;
	
	private List<Material> listaMateriais;
	
	private Material materialSelecinado;
	private String descricaoMaterialPesquisa;
	

	/**
	 * Construtor padrao
	 */
	public EstoqueMB() {

	}

	@PostConstruct
	public void init() {
		preencherCampos();
	}


	private void preencherCampos() {
		this.conversation.setTimeout(TEMPO_VIDA_MB);
		preencherListaMateriais();
	}


	public void beginConversation() {
		if (conversation.isTransient()) {
			conversation.begin();
		}
		
	}

	@PreRemove
	public void endConversation() {
		if (!conversation.isTransient()) {
			conversation.end();
		}
	}
	
	
	
	
	public String getDescricaoMaterialPesquisa() {
		return descricaoMaterialPesquisa;
	}

	public void setDescricaoMaterialPesquisa(String descricaoMaterialPesquisa) {
		this.descricaoMaterialPesquisa = descricaoMaterialPesquisa;
	}

	public List<Material> getListaMateriais() {
		return listaMateriais;
	}

	public void setListaMateriais(List<Material> listaMateriais) {
		this.listaMateriais = listaMateriais;
	}

	public Material getMaterialSelecinado() {
		return materialSelecinado;
	}

	public void setMaterialSelecinado(Material materialSelecinado) {
		this.materialSelecinado = materialSelecinado;
	}

	private void preencherListaMateriais() {
		//if(this.listaMateriais == null)
		this.listaMateriais = this.estoqueEJB.getListaMateriais();
		
		addMessageListaVazia();
	}
	
	
	public void imprimir(){
		try {

			@SuppressWarnings("deprecation")
			String path = getRequest().getRealPath("/ireport/relatorio_estoque.jasper");  
			
			JasperPrint print = RelatorioUtil.imprimirRelatorio(path, null, (List<?>) listaMateriais);
			RelatorioUtil.exportarParaPDF(print, "Estoque_Materiais");
		} catch (Exception e) {
			addMensagemErro(ACAO_NAO_PERMITIDA, new String []{"Erro ao gerar relatorio"});
			e.printStackTrace();
		}
		
		
		
	}
	

	@Override
	public String salvar() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String deletar() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String pesquisar() {
		this.listaMateriais =  this.estoqueEJB.getListaMateriais(this.descricaoMaterialPesquisa);
		addMessageListaVazia();

		return "conEstoque.xhtml";
	}
	
	private void addMessageListaVazia(){
		if (this.listaMateriais.size() == 0){
			addMensagemSucesso(MSG_SUCCESS_ITEM_NAO_ENCONTRADO);
		}	
	}
	

	


}
